package lkx.demo.test3;

/**
 *
 *
 类的成员之一：属性

 1.变量的分类：
 - 角度一：按照数据类型来分：基本数据类型（8种）、引用数据类型（数组、类、接口、枚举、注解、记录）
 - 角度二：按照变量在类中声明的位置的不同：成员变量（或属性）、局部变量（方法内、方法形参、构造器内、构造器形参、代码块内等）

 2. 属性的几个称谓：成员变量、属性、field（字段、域）


 3. 区分成员变量   vs 局部变量
 3.1 相同点：
 > 变量声明的格式相同：数据类型 变量名 = 变量值
 > 变量都有其有效的作用域。出了作用域，就失效了。
 > 变量必须先声明，后赋值，再使用。


 3.2 不同点：
 ① 类中声明的位置的不同：
 属性：声明在类内，方法外的变量
 局部变量：声明方法、构造器内部的变量

 ② 在内存中分配的位置不同（难）：
 属性：随着对象的创建，存储在堆空间中。
 局部变量：存储在栈空间中

 ③ 生命周期：
 属性：随着对象的创建而创建，随着对象的消亡而消亡。
 局部变量：随着方法对应的栈帧入栈，局部变量会在栈中分配；随着方法对应的栈帧出栈，局部变量消亡。

 ④ 作用域：
 属性：在整个类的内部都是有效的
 局部变量：仅限于声明此局部变量所在的方法（或构造器、代码块）中

 ⑤ 是否可以有权限修饰符进行修饰：(难)
 都有哪些权限修饰符：public、protected、缺省、private。（用于表明所修饰的结构可调用的范围的大小）

 属性，是可以使用权限修饰符进行修饰的。 暂时还未讲封装性，所以大家先不用写任何权限符。
 而局部变量，不能使用任何权限修饰符进行修饰的。


 ⑥ 是否有默认值：(重点)
 属性:都有默认初始化值
 意味着，如果没有给属性进行显式初始化赋值，则会有默认初始化值。

 局部变量：都没有默认初始化值。
 意味着，在使用局部变量之前，必须要显式的赋值，否则报错。

 注意：对于方法的形参而言，在调用方法时，给此形参赋值即可。
 *
 * @author kunxianli
 * @date 2024/02/01 17:53
 **/
public class TestField {
}
